package com.test.exception;

/**
 * 当类型转换失败时抛出的异常
 * 这个异常指示了尝试将一个对象转换为不兼容的类型时发生的错误
 */
public class TypeMismatchException extends BeansException{
    // 需要转换的目标类型
    private final Class<?> requiredType;
    // 尝试转换的原始值
    private final Object value;

    /**
     * 构造一个 TypeMismatchException 实例
     *
     * @param value       尝试转换的原始值
     * @param requiredType  需要转换的目标类型
     */
    public TypeMismatchException(Object value, Class<?> requiredType) {
        super("无法将值 [" + value + "] 转换为类型 [" + requiredType.getName() + "]");
        this.value = value;
        this.requiredType = requiredType;
    }

    /**
     * 构造一个 TypeMismatchException 实例，包含原始异常
     *
     * @param value       尝试转换的原始值
     * @param requiredType  需要转换的目标类型
     * @param cause       导致类型转换失败的原始异常
     */
    public TypeMismatchException(Object value, Class<?> requiredType, Throwable cause) {
        super("无法将值 [" + value + "] 转换为类型 [" + requiredType.getName() + "]", cause);
        this.value = value;
        this.requiredType = requiredType;
    }

    /**
     * 获取需要转换的目标类型
     *
     * @return  目标类型
     */
    public Class<?> getRequiredType() {
        return requiredType;
    }

    /**
     * 获取尝试转换的原始值
     *
     * @return  原始值
     */
    public Object getValue() {
        return value;
    }
}
